print("Type Test")
print("-----------")
print("type(\"Hello world\")=" .. type("Hello world"))
print("type(10.4*3) =" .. type(10.4*3))       
print("type(print) =" .. type(print))          
print("type(type) =" .. type(type))           
print("type(true) =" .. type(true))          
print("type(nil) =" .. type(nil))       
print("type(type(X)) =" .. type(type(X)))   

print("-----------")
print("nil 作比较时应该加上双引号")
print("type(X) = " .. type(X))
print("type(X)==nil =", (type(X)==nil))
print("type(X)==\"nil\" =", (type(X)=="nil"))

print("-----------")
print("布尔值")
print("type(true) = " .. type(true))
print("type(false) = " .. type(false))
print("type(nil) = " .. type(nil))
 
if false or nil then
    print("至少有一个是 true")
else
    print("false 和 nil 都为 false")
end

if 0 then
    print("数字 0 是 true")
else
    print("数字 0 为 false")
end

print("-----------")
print("Lua 默认只有一种 number 类型 -- double 类型")

print("type(2) = " .. type(2))
print("type(2.2) = " .. type(2.2))
print("type(0.2) = " .. type(0.2))
print("type(2e+1) = " .. type(2e+1))
print("type(0.2e-1) = " .. type(0.2e-1))
print("type(7.8263692594256e-06) = " .. type(7.8263692594256e-06))

print("-----------")
print("字符串由一对双引号或单引号来表示，也可以用 2 个方括号 [[]] 表示多行字符串")
b = [[
Welcome to wdxtub.com.
Welcome again.
Have a nice day.
Bye.    
]]
print(b)
print("在对一个数字字符串上进行算术操作时，Lua 会尝试将这个数字字符串转成一个数字")
print("\"2\"+6 = ", "2" + 6)
print("\"2\"+ \"6\" = ","2" + "6")
print("\"2 + 6\" = ", "2 + 6")
print("\"-2e2\" * \"6\"" ,"-2e2" * "6")
print("使用 # 来计算字符串的长度")
c = "wdxtub.com"
print("#c = ", #c)
print("#\"wdxtub.com\" =", #"wdxtub.com")

print("-----------")
print("table 的创建是通过\"构造表达式\"来完成，最简单构造表达式是{}，用来创建一个空表。也可以在表里添加一些数据，直接初始化表")
d = {}
d["key"] = "value"
key = 10
d[key] = 22
d[key] = d[key] + 11
for k, v in pairs(d) do
    print(k .. " : " .. v)
end
print("在 Lua 里表的默认初始索引一般以 1 开始")
e = {"a","b","c","d"}
for key, val in pairs(e) do
    print("Key", key)
end
print("table 不会固定长度大小，有新数据添加时 table 长度会自动增长，没初始的 table 都是 nil")

print("-----------")
print("函数可以存在变量里")
function coolFunc(n)
    if n == 0 then
        return 1
    else
        return n + coolFunc(n - 1)
    end
end
print(coolFunc(5))
coolFuncNew = coolFunc
print(coolFuncNew(5))
print("function 可以以匿名函数的方式通过参数传递")
function testFun(tab,fun)
    for k ,v in pairs(tab) do
        print(fun(k,v));
    end
end

tab={key1="val1",key2="val2"}
testFun(tab,
    function(key,val) --匿名函数
        return key.."="..val
    end
)

print("-----------")
print("while 循环")
a=10
while( a < 20 )
do
   print("a 的值为:", a)
   a = a+1
end

print("for 循环")
print("for的三个表达式在循环开始前一次性求值，以后不再进行求值")
for i=10,1,-1 do
    print(i)
end
print("泛型 for 循环通过一个迭代器函数来遍历所有值")
a = {"one", "two", "three"}
for i, v in ipairs(a) do
    print(i, v)
end 
print("repeat...until 循环的条件语句在当前循环结束后判断")
a = 10
repeat
   print("a的值为:", a)
   a = a + 1
until( a > 15 )
print("-----------")
print("if 例子")
a = 10;
if( a < 20 )
then
   print("a 小于 20" )
end
print("a 的值为:", a)
print("if elseif else 例子")
a = 100
if( a == 10 )
then
   print("a 的值为 10" )
elseif( a == 20 )
then  
   print("a 的值为 20" )
elseif( a == 30 )
then
   print("a 的值为 30" )
else
   print("没有匹配 a 的值" )
end
print("a 的真实值为: ", a )
